function prjSetup()
%prjSetup 设置环境
%   为当前项目自定义环境。此函数设置为在启动时运行。
%
%   prjSetup()

%   

% 清理工作空间
evalin('base', 'clear;');
% 关闭所有图形窗口
close('all');
% 关闭所有模型
bdclose('all');
% 关闭所有需求和链接集
if dig.isProductInstalled('Requirements Toolbox')
    slreq.clear();
end
% 关闭所有测试文件和测试结果
if dig.isProductInstalled('Simulink Test')
    sltest.testmanager.clear();
    sltest.testmanager.clearResults();
end
% 清除所有覆盖率数据
if dig.isProductInstalled('Simulink Coverage')
    cvexit();
end
% 将 slddLink 设置为 true 以将模型链接到数据字典，而不是使用基础工作空间
% 否则，将 slddLink 设置为 false
slddLink = true;

% 指定仿真和代码生成产物的存放文件夹
% 仿真和代码生成产物分别存放在 CacheFolder 和 CodeGenFolder 中
% 为方便起见，将 CacheFolder 放置在工作目录中
workDir = ProjectPathManager.getDirPath('work');
cacheDir = fullfile(workDir, 'cache');
if ~exist(cacheDir, 'dir')
    mkdir(cacheDir);
end
codeGenDir = ProjectPathManager.getDirPath('code');
if ~exist(codeGenDir, 'dir')
    mkdir(codeGenDir);
end
Simulink.fileGenControl('set', 'CacheFolder', cacheDir, 'CodeGenFolder', codeGenDir);

% 切换到工作目录
cd(workDir);

if ~slddLink
    % 如果模型配置是使用 MATLAB 数据文件而不是 Simulink 数据字典文件定义的
    % 则将模型配置加载到基础工作空间
    evalin('base', 'nonreusableModelConfig;');
    evalin('base', 'reusableModelConfig;');
end

% 设置 RMI
if dig.isProductInstalled('Requirements Toolbox')
    rmiSetup();
else
    warning('Requirements Toolbox 许可证不可用。跳过 RMI 设置。');
end

if dig.isProductInstalled('Simulink Check')
    % 添加自定义 Model Advisor 检查
    Advisor.Manager.refresh_customizations;
%     % 将默认的 Model Advisor 配置设置为项目设置
%     setDefaultMdlAdvCfg();
    % 设置模型分类以供 Model Testing Dashboard 使用
    % setModelClassification();
else
    warning('Simulink Check 许可证不可用。');
end

% 刷新所有 Simulink 自定义设置
sl_refresh_customizations();

% 训练建议引擎以基于 do178Lib 改进快速模块插入结果
% try
%     slblocksearchdb.trainfrommodel(fullfile(ProjectPathManager.getDirPath('block libraries'), 'do178Lib.slx'));
% catch
% end

end
